Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

204
Views
In "mongosh", how do I delete all databases without deleting the typical "admin", "config", or "local" databases?

What am I trying to do?

I wrote a script called deleteDatabases.js and it's supposed to delete all databases (besides "admin", "config", or "local") when inside mongosh. I do not have access to mongo, only mongosh.

What is the code that currently tries to do that?

deleteDatabases.js

Mongo().getDBNames().forEach(function(x) {
  if (['admin', 'config', 'local'].indexOf(x) < 0) {
    Mongo().getDB(x).dropDatabase();
  }
})

Inside mongosh:

$ mongosh
...
Using MongoDB: 4.4.1
Using Mongosh Beta: 0.4.0
> show dbs
admin 184 kB
config 36.9 kB
database1 283 kB
database2 420 kB
database3 1337 kB
local 90.1 kB
> .load /deleteDatabases.js

... (Code from deleteDatabases.js) ...

TypeError: (intermediate value).getDBNames is not a function

Before what I did to successfully delete these databases was:

> db = db.getSiblingDB("database1")
database1
> db.dropDatabase()
{ ok: 1, dropped: 'database1' }
# Repeat for each database I want deleted.

What do I expect the result to be?

I expect all the databases to be deleted besides "admin", "config", or "local".

What is the actual result?

As above, there's a TypeError.

What I think the problem could be?

  1. The version of mongosh I'm using is out of date and does not have those methods implemented yet or at all.
  2. My .js file is implemented incorrectly.

Was wondering if there was an alternative where I still use mongosh unless I have to use something else.

EDIT:

deleteDatabases.js

db.adminCommand( { listDatabases: 1 } ).databases.
  map(database => database.name).
  filter(name => ["admin", "config", "local"].indexOf(name) == -1).
  forEach(function(name){db.getSiblingDB(name).dropDatabase()})

This is the fix that I'm using, but would love the .map() to work so I can see an output after running the command as spoken by Joe.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Use the listDatabases admin command, map to get just the database name, and filter to eliminate the ones you don't want:

db.adminCommand("listDatabases").databases.
   map(d => d.name).
   filter(n => ["admin", "config", "local"].indexOf(n) == -1 ).
   map(n => db.getSiblingDB(n).dropDatabase())

Note that if you use map instead of forEach you will get back a confirmation of which databases were dropped successfully, like

[
  { ok: 1, dropped: 'test' },
  { ok: 1, dropped: 'test1' },
  { ok: 1, dropped: 'test2' }
]
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!